﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TVH.Web.Code;
using TVH.Comum;

namespace TVH.Cadastro
{
    public partial class Setor : BasePage
    {

        public List<Entidade.SetorCategoria> CategoriasAssociadas
        {
            get
            {
                var _categorias = ViewState["CategoriasAssociadas"] as List<Entidade.SetorCategoria>;
                if (_categorias == null)
                {
                    _categorias = new List<Entidade.SetorCategoria>();
                    ViewState["CategoriasAssociadas"] = _categorias;

                    var result = persistenciaSetorCategoria.ObterLista(new Entidade.SetorCategoria()
                    {
                        CodSetor = ModelID ?? 0
                    });
                    result = result.OrderBy(x => x.DescricaoCategoria).ToList();
                    _categorias.AddRange(result.ToList());
                }
                return _categorias;
            }
        }

        Persistencia.PerSetor persistencia = new Persistencia.PerSetor();
        Persistencia.PerCategoriaProduto persistenciaCategoria = new Persistencia.PerCategoriaProduto();
        Persistencia.PerSetorCategoria persistenciaSetorCategoria = new Persistencia.PerSetorCategoria();
        protected void Page_Load(object sender, EventArgs e)
        {
            
            
            
            if (Handler.GridAction == "Detalhar")
            {
                var id = Handler.ModelID.Value;
                var item = persistencia.Obter(id);

                PopularTela(item);

                txtDescricao.Attributes["readonly"] = "readonly";
                btnSalvar.Visible = false;
            }
            else if (Handler.GridAction == "Editar")
            {
                
                var id = Handler.ModelID.Value;
                var item = persistencia.Obter(id);

                PopularTela(item);
            }
            CarregarGrid();
            if (!IsPostBack)
            {
                CarregarCombo();
            }
        }

        private void CarregarGrid()
        {

            gridResultado.DataSource = CategoriasAssociadas;
            gridResultado.DataBind();
        }

        private void PopularTela(Entidade.Setor item)
        {
            hdnID.Value = item.Id.ToString();
            txtDescricao.Text = item.Descricao;
        }

        private void CarregarCombo()
        {
            ddlCategoria.DataSource = persistenciaCategoria.ObterLista();
            ddlCategoria.DataTextField = "Descricao";
            ddlCategoria.DataValueField = "ID";
            ddlCategoria.DataBind();
            
        }


        public void gridResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var link = e.Row.FindControl("lnkExcluir");
                ((LinkButton)link).Attributes.Add("onclick", "javascript:return confirm('Confirmar exclusão?')");
            }
        }

        public void gridResultado_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                CategoriasAssociadas.RemoveAt(e.RowIndex);
                CarregarGrid();
            }
            catch (Exception ex)
            {
                ExibirMensagemErro("Erro ao excluir categoria!", ex);
            }
        }

        public void btnAdicionar_Click(object sender, EventArgs e)
        {
            CategoriasAssociadas.Add(new Entidade.SetorCategoria()
            {
                CodCategoria = Convert.ToInt32(ddlCategoria.SelectedValue).ToNullable(),
                DescricaoCategoria = ddlCategoria.SelectedItem.Text
            });
            CarregarGrid();
        }

        public void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                var entidade = PopularEntidade();
                entidade.Categorias = CategoriasAssociadas.Select(x => new Entidade.CategoriaProduto()
                {
                    Id = x.CodCategoria
                }).ToList();
                Negocio.NegSetor negocio = new Negocio.NegSetor();
                if (string.IsNullOrEmpty(hdnID.Value))
                {
                    negocio.Inserir(entidade);
                }
                else
                {
                    entidade.Id = Convert.ToInt32(hdnID.Value);
                    negocio.Alterar(entidade);
                }
                ExibirMensagemSucesso("Setor salvo com sucesso!");
            }
            catch (Exception ex)
            {
                ExibirMensagemErro("Erro ao salvar setor.", ex);
            }
        }

        private Entidade.Setor PopularEntidade()
        {
            return new Entidade.Setor()
                    {
                        Descricao = txtDescricao.Text,
                    };
        }

    }
}